
/** 
 * Project Name: core
 * File Name:    PhoneFormatCheckUtils.java 
 * Package Name: com.ql.core.util
 * Date:2017年10月17日下午4:04:12 
 * Copyright (c) 2017, wangazhi@sohu.com All Rights Reserved. 
 * 
 */    
  
package com.wzapp.sitposture.common.util;

import org.apache.commons.lang3.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

/** 
 * 功能:    手机号验证工具. <br/> 
 * 日期:    2017年10月17日 下午4:04:12 <br/> 
 * 
 * @author ql
 * @version  
 * @since JDK 1.8
 */
public class PhoneFormatCheckUtils {
	/** 
     * 大陆号码或香港号码均可 
     */  
    public static boolean isPhoneLegal(String str)throws PatternSyntaxException {  
        return isChinaPhoneLegal(str) || isHKPhoneLegal(str);  
    }  
  
    /** 
     * 大陆手机号码11位数，匹配格式：前三位固定格式+后8位任意数 
     * 此方法中前三位格式有： 
     * 13+任意数 
     * 15+除4的任意数 
     * 18+除1和4的任意数 
     * 17+除9的任意数 
     * 147  
     * 199
     * 166
     */
    public static boolean isChinaPhoneLegal(String str) throws PatternSyntaxException {  
        String regExp = "^((13[0-9])|(15[^4])|(18[0,2,3,5-9])|(17[0-8])|(147)|(199)|(166))\\d{8}$";  
        Pattern p = Pattern.compile(regExp);  
        Matcher m = p.matcher(str);  
        return m.matches();  
    }  
  
    /** 
     * 香港手机号码8位数，5|6|8|9开头+7位任意数 
     */  
    public static boolean isHKPhoneLegal(String str)throws PatternSyntaxException {  
        String regExp = "^(5|6|8|9)\\d{7}$";  
        Pattern p = Pattern.compile(regExp);  
        Matcher m = p.matcher(str);  
        return m.matches();  
    }

    public static boolean isFixNumbers(String mobile) {
        String mobileStr;
        if(mobile.contains(" ")){
            String[] m = mobile.split(" ");
            mobileStr = m[1];
        }else {
            mobileStr = mobile;
        }

        if(StringUtils.isNumeric(mobileStr)){
            return true;
        }else{
            return false;
        }
    }

    public static String filter(String str) {
        //400号码 4008081758 400-808-1758 4008-081-758
        String regEx400 = "(400[0-9]{7})|(400[-\\s*][0-9]{3}[-\\s*][0-9]{4})|(400[0-9][-\\s*][0-9]{3}[-\\s*][0-9]{3})";
        //800号码 8008081758 800-808-1758 8008-081-758
        String regEx800 = "(800\\d{7})|(800[-\\s*][0-9]{3}[-\\s*][0-9]{4})|(800[0-9][-\\s*][0-9]{3}[-\\s*][0-9]{3})";
        //11位手机号码
        String regExMobile = "(1(3|4|7|5|8)(\\d{9}))";
        //固话正则 025-84251234,02584251234,025 84251234
        String regExTel = "(0\\d{2,3}[-\\s*]{0,1}\\d{8})";

        String regEx = regEx400 + "|" + regEx800 + "|" + regExMobile+ "|" + regExTel;
        Pattern p = Pattern.compile(regEx);
        Matcher m = p.matcher(str);
//        while (m.find()) {
//            //一定需要先查找再调用group获取电话号码
//            System.out.println(m.group());
//        }
        return m.replaceAll("****").trim();
    }

    public static void main(String[] args) {

        String str = "测试下 02512345678 025 12345678 4008081758 025-12345678   8008081758 800-808-1758 8008-081-758 " +
                "4008-081-758 18751953169";
        System.out.println(PhoneFormatCheckUtils.filter(str));
    }

}
